package com.waitingresult.common;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 * @Author: WangShuai
 * @CreateTime: 2023-02-21  17:27
 * @Description: 常用校验字符串的工具类
 * @Version: 1.0
 */
public class StringUtils {
    /**
     * 常见特殊字符  不包含 [_,-] 下划线,中划线 中英文左右括号
     */
    //不包含下划线 包含 中英文括号
    public static final Set<Character> STOP_WORD_BRACKETS = new HashSet<>(Arrays.asList('-', ' ', '\'', '、', '。',
            '·', 'ˉ', 'ˇ', '々', '—', '～', '‖', '…', '‘', '’', '“', '”', '〔', '〕', '〈', '〉', '《', '》', '「', '」', '『',
            '』', '〖', '〗', '【', '】', '±', '＋', '－', '×', '÷', '∧', '∨', '∑', '∏', '∪', '∩', '∈', '√', '⊥', '⊙', '∫',
            '∮', '≡', '≌', '≈', '∽', '∝', '≠', '≮', '≯', '≤', '≥', '∞', '∶', '∵', '∴', '∷', '♂', '♀', '°', '′', '〃',
            '℃', '＄', '¤', '￠', '￡', '‰', '§', '☆', '★', '〇', '○', '●', '◎', '◇', '◆', '□', '■', '△', '▽', '⊿', '▲',
            '▼', '◣', '◤', '◢', '◥', '▁', '▂', '▃', '▄', '▅', '▆', '▇', '█', '▉', '▊', '▋', '▌', '▍', '▎', '▏', '▓',
            '※', '→', '←', '↑', '↓', '↖', '↗', '↘', '↙', '〓', 'ⅰ', 'ⅱ', 'ⅲ', 'ⅳ', 'ⅴ', 'ⅵ', 'ⅶ', 'ⅷ', 'ⅸ', 'ⅹ', '①',
            '②', '③', '④', '⑤', '⑥', '⑦', '⑧', '⑨', '⑩', '⒈', '⒉', '⒊', '⒋', '⒌', '⒍', '⒎', '⒏', '⒐', '⒑', '⒒', '⒓',
            '⒔', '⒕', '⒖', '⒗', '⒘', '⒙', '⒚', '⒛', '⑴', '⑵', '⑶', '⑷', '⑸', '⑹', '⑺', '⑻', '⑼', '⑽', '⑾', '⑿', '⒀',
            '⒁', '⒂', '⒃', '⒄', '⒅', '⒆', '⒇', 'Ⅰ', 'Ⅱ', 'Ⅲ', 'Ⅳ', 'Ⅴ', 'Ⅵ', 'Ⅶ', 'Ⅷ', 'Ⅸ', 'Ⅹ', 'Ⅺ', 'Ⅻ', '！', '”',
            '＃', '￥', '％', '＆', '’', '＊', '＋', '，', '－', '．', '／', '０', '１', '２', '３', '４', '５', '６', '７',
            '８', '９', '：', '；', '＜', '＝', '＞', '？', '＠', '〔', '＼', '〕', '＾', '＿', '‘', '｛', '｜', '｝', '∏', 'Ρ', '∑',
            'Υ', 'Φ', 'Χ', 'Ψ', 'Ω', 'α', 'β', 'γ', 'δ', 'ε', 'ζ', 'η', 'θ', 'ι', 'κ', 'λ', 'μ', 'ν', 'ξ', 'ο', 'π',
            'ρ', 'σ', 'τ', 'υ', 'φ', 'χ', 'ψ', 'ω', '〔', '〕', '＾', '﹊', '﹍', '╭', '╮', '╰', '╯', '',
            '', '^', '^', '：', '！', '/', '\\', '\"', '<', '>', '`', '·', '。', '{', '}', '~', '～',
            '√', '$', '@', '*', '&', '#', '卐', '㎎', '㎏', '㎜', '㎝', '㎞', '㎡', '㏄', '㏎', '㏑', '㏒', '㏕'));

    /**
     * 中英文左右括号
     */
    public static final Set<Character> BRACKETS = new HashSet<>(Arrays.asList(new Character[]{'(', ')', '（', '）'}));
    public static boolean isStopString(String word) {
        return isStopString(word,false,false);
    }

    /**
     * @param word 字符串
     * @param isCheckUnderline 是否校验下划线
     * @param isCheckBrackets  是否校验括号
     * @return
     */
    public static boolean isStopString(String word, boolean isCheckUnderline,boolean isCheckBrackets) {
        char currentChar = 0;
        int length = word.length();
        boolean isStopCharFlag = false;
        boolean isCheckUnderlineFlag = false;
        boolean resultFlag = false;
        boolean result = false;
        for (int i = 0; i < length; i++) {
            currentChar = word.charAt(i);
            if (isStopChar(currentChar)) {
                isStopCharFlag =  true;
            }
            if (isCheckUnderline) {
                String temp = currentChar + "";
                isCheckUnderlineFlag =  "_".equals(temp);
            }
            if(isCheckBrackets){
                resultFlag =  isBracketsChar(currentChar);
            }
            result = isStopCharFlag^isCheckUnderlineFlag^resultFlag;
            if(result){
                return true;
            }
        }
        return result;
    }

    public static boolean isStopChar(char ch) {
        return Character.isWhitespace(ch) || STOP_WORD_BRACKETS.contains(ch);
    }

    //Character.isWhitespace(ch) || 判断空格
    public static boolean isBracketsChar(char ch) {
        return BRACKETS.contains(ch);
    }
}
